/* Copyright (C) 2011, Christian Trutz <christian.trutz@belaso.de> All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html */ package de.belaso.mongolyn.ui; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.mylyn.internal.tasks.core.IRepositoryConstants; import org.eclipse.mylyn.tasks.core.TaskRepository; import org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositorySettingsPage; import org.eclipse.swt.widgets.Composite; import com.mongodb.DB; import com.mongodb.MongoURI; /** * * @author Christian Trutz * */ @SuppressWarnings("restriction") public class RepositorySettingsPage extends AbstractRepositorySettingsPage { public RepositorySettingsPage(TaskRepository taskRepository) { super(Messages.RepositorySettingsPage_Title, Messages.RepositorySettingsPage_Description, taskRepository); setNeedsProxy(false); setNeedsAnonymousLogin(true); } @Override public String getConnectorKind() { return RepositoryConnector.KIND; } @Override protected void createAdditionalControls(Composite parent) { } @Override protected boolean isValidUrl(String url) { try { MongoURI mongoURI = new MongoURI(url); if (mongoURI.getDatabase() == null) return false; else return true; } catch (RuntimeException runtimeException) { return false; } } @Override protected Validator getValidator(final TaskRepository repository) { return new Validator() { @Override public void run(IProgressMonitor progressMonitor) throws CoreException { progressMonitor .beginTask( Messages.RepositorySettingsPage_ValidateRepositorySettings, 1); DB db = null; try { db = MongolynUtils.openNewDB(repository); db.getCollectionNames(); progressMonitor.worked(1); } finally { if (db != null) db.getMongo().close(); progressMonitor.done(); } } }; } @Override public void applyTo(TaskRepository repository) { repository.setProperty(IRepositoryConstants.PROPERTY_CATEGORY, IRepositoryConstants.CATEGORY_TASKS); super.applyTo(repository); } }